package com.arsn.myf.system.service;

import com.arsn.myf.system.entity.Role;
import com.arsn.myf.system.entity.User;
import com.arsn.myf.system.excel.UserExcel;
import com.arsn.myf.system.vo.UserVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
 * 用户接口层
 * @author zhongrj
 * @since 2022-06-12
 */
public interface UserService extends IService<User> {

    /**
     * 自定义用户分页数据
     * @param page
     * @param user
     * @return
     */
    IPage<UserVO> selectPageUserList(Page<UserVO> page, UserVO user);

    /**
     * 用户新增
     * @param user
     * @return
     */
    boolean insertUser(User user);

    /**
     * 用户信息修改
     * @param user 用户对象信息
     * @return
     */
    boolean updateUser(User user);

    /**
     * 根据用户查询权限集合
     * @param user 用户对象信息
     * @return
     */
    Set<String> getMenuPermission(User user);

    /**
     * 根据用户查询角色集合
     * @param user 用户对象信息
     * @return
     */
    Set<String> getRolePermission(User user);

    /**
     * 查询所有用户
     * @param user
     * @return
     */
    List<UserVO> getUserList(UserVO user);

    /**
     * 根据用户ID查询角色信息
     * @param id 用户id
     * @return
     */
    List<Role> getRoleByUserId(Long id);

    /**
     * 用户密码修改
     * @param user(必须包含 id, password,newPassword)
     * @return
     */
    boolean updatePassword(UserVO user);

    /**
     * 用户excel 导入
     * @param data
     * @param isCovered 是否覆盖
     */
    void importUser(List<UserExcel> data, Boolean isCovered);

    /**
     * 查询用户导出数据
     * @param user
     * @return
     */
    List<UserExcel> exportUserExcelPage(UserVO user);
}
